/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package menor.tiempo.modelo;

import java.util.ArrayList;
import javax.swing.JOptionPane;
import menor.tiempo.vista.Vtnprincipal;

/**
 *
 * @author 
 */
public class PasarRio {

    private ArrayList<Persona> personas;//lista de personas A,B,C,D
    private ArrayList<Persona> personasPasadas;// lista de personas que cruzan en pares
    private ArrayList<Cruzada> cruzadas;//lista de personas quedadas al otro lado
    private int tiempoMayor = 0;//tiempo mayor del que cruza
    private int tiempoMenor = 0;//tiempo menor del que cruza

    public PasarRio() {
        personas = new ArrayList<Persona>();
        personasPasadas = new ArrayList<Persona>();
        cruzadas = new ArrayList<Cruzada>();
        tiempoMayor = 0;
        tiempoMenor = 0;

    }

    public void generarOrden() {

        ArrayList<Persona> person = new ArrayList<Persona>();
        // ingresar valores

        person.add(new Persona("A", 1));
        person.add(new Persona("B", 2));
        person.add(new Persona("C", 5));
        person.add(new Persona("D", 10));

        setPersonas(new ArrayList<Persona>());

        int pos = (int) (Math.random() * 4);
        getPersonas().add(person.get(pos));

        do {
            pos = (int) (Math.random() * 4);
            if (!personas.contains(person.get(pos))) {
                getPersonas().add(person.get(pos));
            }
        } while (getPersonas().size() < 4);

    }

    public void cruzarMenorTiempo() {
// crea arreglo para ke krucen primero
        setCruzadas(new ArrayList<Cruzada>());
        Cruzada cruzada = new Cruzada();
        //Inicio
        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(tiempoMenor);
        getCruzadas().add(cruzada);

        /////ciclo
        //ida
        cruzada = new Cruzada();
        System.out.println("pasadas");

        Persona cruza1 = getPersonas().remove(0);
        Persona cruza2 = new Persona("", 0);
        if (getPersonas().size() != 1) {
            cruza2 = getPersonas().remove(0);
            if (cruza1.getTiempo() > cruza2.getTiempo()) {
                setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());
                cruzada.setTiempo(cruza1.getTiempo());
            } else {
                setTiempoMenor(getTiempoMenor() + cruza2.getTiempo());
                cruzada.setTiempo(cruza2.getTiempo());
            }

        } else {
            setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());
            cruzada.setTiempo(cruza1.getTiempo());
        }


        cruzada.setInicio(getPersonas().toString());
        cruzada.setCruzando(cruza1 + " " + cruza2);
        cruzada.setDireccion(Cruzada.primera);
        cruzada.setFin(personasPasadas.toString());

        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);

        cruzada = new Cruzada();
        personasPasadas.add(cruza1);
        personasPasadas.add(cruza2);
        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);

        //regreso
        int indice = 0;
        for (int i = 0; i < personasPasadas.size() - 1; i++) {
            if (personasPasadas.get(i).getTiempo() > personasPasadas.get(i + 1).getTiempo()) {
                indice = i + 1;
            }
        }


        Cruzada cruza = new Cruzada();
        cruzada = new Cruzada();
        cruza1 = personasPasadas.remove(indice);
        setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());

        cruza.setTiempo(cruza1.getTiempo());
        cruza.setTiempoTotal(getTiempoMenor());
        cruza.setInicio(getPersonas().toString());
        cruza.setCruzando(cruza1 + " ");
        cruza.setDireccion(Cruzada.segunda);
        cruza.setFin(personasPasadas.toString());
        getCruzadas().add(cruza);

        getPersonas().add(cruza1);


        ///////////////

        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(tiempoMenor);
        getCruzadas().add(cruzada);

        /////ciclo
        //ida
        cruzada = new Cruzada();
        System.out.println("pasadas");

        cruza1 = getPersonas().remove(0);
        cruza2 = new Persona("", 0);
        if (getPersonas().size() != 1) {
            cruza2 = getPersonas().remove(0);
            if (cruza1.getTiempo() > cruza2.getTiempo()) {
                setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());
                cruzada.setTiempo(cruza1.getTiempo());
            } else {
                setTiempoMenor(getTiempoMenor() + cruza2.getTiempo());
                cruzada.setTiempo(cruza2.getTiempo());
            }

        } else {
            setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());
            cruzada.setTiempo(cruza1.getTiempo());
        }


        cruzada.setInicio(getPersonas().toString());
        cruzada.setCruzando(cruza1 + " " + cruza2);
        cruzada.setDireccion(Cruzada.primera);
        cruzada.setFin(personasPasadas.toString());

        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);

        cruzada = new Cruzada();
        personasPasadas.add(cruza1);
        personasPasadas.add(cruza2);
        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);

        //regreso
        indice = 0;
        for (int i = 0; i < personasPasadas.size() - 1; i++) {
            if (personasPasadas.get(i).getTiempo() > personasPasadas.get(i + 1).getTiempo()) {
                indice = i + 1;
            }
        }


//           sigue
//            
//            

        Cruzada cruzar = new Cruzada();
        cruzada = new Cruzada();
        cruza1 = personasPasadas.remove(indice);
        setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());

        cruzar.setTiempo(cruza1.getTiempo());
        cruzar.setTiempoTotal(getTiempoMenor());
        cruzar.setInicio(getPersonas().toString());
        cruzar.setCruzando(cruza1 + " ");
        cruzar.setDireccion(Cruzada.segunda);
        cruzar.setFin(personasPasadas.toString());
        getCruzadas().add(cruzar);

        getPersonas().add(cruza1);




        /////////////////




        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(tiempoMenor);
        getCruzadas().add(cruzada);

        /////ciclo
        //ida
        cruzada = new Cruzada();
        System.out.println("pasadas");

        cruza1 = getPersonas().remove(0);
        cruza2 = getPersonas().remove(0);
        if (cruza1.getTiempo() > cruza2.getTiempo()) {
            setTiempoMenor(getTiempoMenor() + cruza1.getTiempo());
            cruzada.setTiempo(cruza1.getTiempo());
        } else {
            setTiempoMenor(getTiempoMenor() + cruza2.getTiempo());
            cruzada.setTiempo(cruza2.getTiempo());
        }




        cruzada.setInicio(getPersonas().toString());
        cruzada.setCruzando(cruza1 + " " + cruza2);
        cruzada.setDireccion(Cruzada.primera);
        cruzada.setFin(personasPasadas.toString());

        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);

        cruzada = new Cruzada();
        personasPasadas.add(cruza1);
        personasPasadas.add(cruza2);
        cruzada.setInicio(getPersonas().toString());
        cruzada.setDireccion("--");
        cruzada.setFin(personasPasadas.toString());
        cruzada.setCruzando("");
        cruzada.setTiempo(0);
        cruzada.setTiempoTotal(getTiempoMenor());
        getCruzadas().add(cruzada);






    }

    public String toString() {
        String s = "";
        for (Persona pers : getPersonas()) {
            System.out.println(pers.getNombre());
        }
        return s;
    }

    /**
     * @return the cruzadas
     */
    public ArrayList<Cruzada> getCruzadas() {
        return cruzadas;
    }

    /**
     * @param cruzadas the cruzadas to set
     */
    public void setCruzadas(ArrayList<Cruzada> cruzadas) {
        this.cruzadas = cruzadas;
    }

    /**
     * @return the tiempoMayor
     */
    public int getTiempoMayor() {
        return tiempoMayor;
    }

    /**
     * @param tiempoMayor the tiempoMayor to set
     */
    public void setTiempoMayor(int tiempoMayor) {
        this.tiempoMayor = tiempoMayor;
    }

    /**
     * @return the tiempoMenor
     */
    public int getTiempoMenor() {
        return tiempoMenor;
    }

    /**
     * @param tiempoMenor the tiempoMenor to set
     */
    public void setTiempoMenor(int tiempoMenor) {
        this.tiempoMenor = tiempoMenor;
    }

    /**
     * @return the personas
     */
    public ArrayList<Persona> getPersonas() {
        return personas;
    }

    /**
     * @param personas the personas to set
     */
    public void setPersonas(ArrayList<Persona> personas) {
        this.personas = personas;
    }
}
